package com.cleaningcloud.cld.service;

import com.cleaningcloud.cld.api.domain.CldStaff;
import com.cleaningcloud.cld.api.domain.Vo.CldStaffDto;
import com.cleaningcloud.cld.domain.vo.CldStaffVo;

import java.util.List;
import java.util.Map;

/**
 * 人员花名册Service接口
 *
 * @author cleaningcloud
 * @date 2024-10-12
 */
public interface ICldStaffService {
    /**
     * 查询人员花名册
     *
     * @param staffId 人员花名册主键
     * @return 人员花名册
     */
    CldStaff selectCldStaffByStaffId(Long staffId);

    /**
     * 查询人员花名册列表
     *
     * @param cldStaff 人员花名册
     * @return 人员花名册集合
     */
    List<CldStaffVo> selectCldStaffList(CldStaffDto cldStaff);


    /**
     * 导入用户数据
     *
     * @param staffList       用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    String importStaff(List<CldStaff> staffList, Boolean isUpdateSupport, String operName);


    /**
     * 员工统计
     *
     * @return
     */
    Map<String, Object> selectCldStaffAnalyze();

    /**
     * 新增人员花名册
     *
     * @param cldStaff 人员花名册
     * @return 结果
     */
    int insertCldStaff(CldStaff cldStaff);

    /**
     * 恢复已入职
     * @param cldStaff
     * @return
     */
    int reinstatementStaff(Long staffId);

    /**
     * 修改人员花名册
     *
     * @param cldStaff 人员花名册
     * @return 结果
     */
    int updateCldStaff(CldStaff cldStaff);

    /**
     * 员工离职申请
     *
     * @param cldStaff
     * @return
     */
    int resignCldStaff(CldStaff cldStaff);

    /**
     * 批量删除人员花名册
     *
     * @param staffIds 需要删除的人员花名册主键集合
     * @return 结果
     */
    int deleteCldStaffByStaffIds(Long[] staffIds);

    /**
     * 删除人员花名册信息
     *
     * @param staffId 人员花名册主键
     * @return 结果
     */
    int deleteCldStaffByStaffId(Long staffId);


    /**
     * 员工离职
     */
    void staffResignation();


    /**
     * 根据手机号查询
     *
     * @param staffPhone
     * @return
     */
    CldStaff selectStaffByStaffPhone(String staffPhone);

    /**
     * 注册用户信息
     *
     * @param cldStaff 用户信息
     * @return 结果
     */
    boolean registerStaff(CldStaff cldStaff);

    /**
     * 校验手机号称是否唯一
     *
     * @param cldStaff 员工信息
     * @return 结果
     */
    boolean checkUserPhoneUnique(CldStaff cldStaff);


    /**
     * 校验身份证是否唯一
     *
     * @param cldStaff 员工信息
     * @return 结果
     */
    boolean checkUserIdCardUnique(CldStaff cldStaff);
}
